1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<script>
import { fail, post, wait } from '$lib/utils';
import { Buffer } from 'buffer';
import { onMount } from 'svelte';
import { bech32m } from 'bech32';
import { generateMnemonic, mnemonicToEntropy, mnemonicToSeedSync } from 'bip39';
import { goto, invalidate } from '$app/navigation';
import { Pin } from '$comp';
import { loginRedirect, pin, password, passwordPrompt } from '$lib/store';
import { generate } from '$lib/nostr';
import { browser } from '$app/environment';
export let data;
let { user } = data;
let loaded;
let gen = async () => {
if (!browser) return;
setTimeout(() => (loaded = true), 50);
if (!$password) $passwordPrompt = true;
try {
await post('/password', { password: $password });
} catch (e) {
$passwordPrompt = true;
}
await wait(() => $password);
try {
await generate(user);
} catch (e) {
console.log('error generating', e);
}
try {
user.pin = $pin;
await post(`/${user.username}/generate`, user);
goto($loginRedirect || `/${user.username}/dashboard`, { invalidateAll: true });
} catch (e) {
$pin = '';
if (e.message?.startsWith('Pin')) {
fail('Wrong pin, try again');
} else {
fail('Failed to generate keys');
goto('/');
}
}
};
onMount(async () => {
await gen();
});
$: $pin?.length === 6 && gen(user);
</script>
{#if loaded && user?.haspin && $pin?.length !== 6}
<Pin />
{/if}
|